"""
@Author  : 康帅
@Time    : 2021/4/14 17:21
@Function: 线程间的通讯
"""

import threading
import time
import queue


"""
在一个进程中，不同子线程负责不同的任务，t1子线程负责获取到数据，
t2子线程负责把数据保存的本地，那么他们之间的通信使用Queue来完成。
因为再一个进程中，数据变量是共享的，即多个子线程可以对同一个全局变量进行操作修改，
Queue是加了锁的安全消息队列。


注意queue.join()阻塞等待队列中任务全部处理完毕，需要配合queue.task_done使用
"""
q = queue.Queue(maxsize=5)


def t1(q):
    while True:
        for i in range(10):
            q.put(i)


def t2(q):
    while not q.empty():
        print('队列中的数据量:' + str(q.qsize()))
        # q.qsize()是获取队列中剩余的数量
        print('取出值:' + str(q.get()))
        # q.get()是一个堵塞的，会等待直到获取到数据
        print('-----')
        time.sleep(0.1)


t1 = threading.Thread(target=t1, args=(q,))
t2 = threading.Thread(target=t2, args=(q,))
t1.start()
t2.start()
